package com.sctvcloud.longchang.ui.utils;

import android.app.Activity;
import android.content.Context;
import android.support.annotation.NonNull;
import android.widget.ImageView;

import com.bumptech.glide.BitmapTypeRequest;
import com.bumptech.glide.DrawableRequestBuilder;
import com.bumptech.glide.DrawableTypeRequest;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.ruihang.generalibrary.utils.UrlUtils;
import com.sctvcloud.longchang.R;
import com.sctvcloud.longchang.application.Constances;

import java.io.File;

/**
 * Created by Ly on 2016/12/2.
 */
public class GlideUtil {

    public static DrawableTypeRequest<String> getGlid(@NonNull Context context, @NonNull String url) {
        return Glide.with(context).load(UrlUtils.linkUrls(Constances.ST_BASE_URL, url));
    }

    public static DrawableTypeRequest<File> getGlid(@NonNull Context context, @NonNull File file) {
        return Glide.with(context).load(file);
    }

    public static DrawableTypeRequest<String> getDynamicGlid(@NonNull Context context, @NonNull String url) {
        return Glide.with(context).load(UrlUtils.linkUrls(Constances.DY_BASE_URL, url));
    }

    public static BitmapTypeRequest<String> getGlidAsBitmap(@NonNull Context context, @NonNull String url) {
        return Glide.with(context).load(UrlUtils.linkUrls(Constances.ST_BASE_URL, url)).asBitmap();
    }

    public static BitmapTypeRequest<String> getDynamicGlidAsBitmap(@NonNull Context context, @NonNull String url) {
        return Glide.with(context).load(UrlUtils.linkUrls(Constances.DY_BASE_URL, url)).asBitmap();
    }

    public static DrawableRequestBuilder<String> getGlid(@NonNull Context context, @NonNull String url, boolean isSkipCache) {
        return Glide.with(context).load(UrlUtils.linkUrls(Constances.ST_BASE_URL, url)).skipMemoryCache(isSkipCache);
    }

    public static DrawableRequestBuilder<String> getDynamicGlid(@NonNull Context context, @NonNull String url, boolean isSkipCache) {
        return Glide.with(context).load(UrlUtils.linkUrls(Constances.ST_BASE_URL, url)).skipMemoryCache(isSkipCache).error(R.mipmap.icon_circle_avatar);
    }

    public static DrawableRequestBuilder<String> getAvatarGlid(@NonNull Context context, @NonNull String url, boolean isSkipCache) {
        return getDynamicGlid(context, url, true).transform(new GlideCircleTransform(context))
                .diskCacheStrategy(DiskCacheStrategy.NONE);
    }

    public static DrawableRequestBuilder<String> getCircleGlid(@NonNull Context context, @NonNull String url, boolean isSkipCache) {
        return Glide.with(context).load(UrlUtils.linkUrls(Constances.ST_BASE_URL, url)).skipMemoryCache(isSkipCache).placeholder(R.mipmap.default_icon_1_1).error(R.mipmap.default_icon_1_1);
    }

    /**
     * 加载16:9的大图片,默认或出错使用{icon_def_16_9_l}，使用此方法前请判断非空
     *
     * @param context
     * @param url
     */
    public static DrawableRequestBuilder<String> getGlideWithLarge169DefENotFit(@NonNull Context context, @NonNull String url) {
        return getGlid(context, url).error(R.mipmap.icon_def_16_9_l);
    }

    /**
     * 加载16:9的大图片,默认或出错使用{icon_def_16_9_l}，使用此方法前请判断非空
     *
     * @param context
     * @param url
     */
    public static DrawableRequestBuilder<String> getGlideWithLarge169DefNotFit(@NonNull Context context, @NonNull String url) {
        return getGlid(context, url).placeholder(R.mipmap.icon_def_16_9_l).error(R.mipmap.icon_def_16_9_l);
    }

    public static DrawableRequestBuilder<?> getGlideWithLarge169CenterCrop(@NonNull Context context, @NonNull String url) {
        return getGlid(context, url).centerCrop().placeholder(R.mipmap.icon_def_16_9_l).error(R.mipmap.icon_def_16_9_l);
    }

    /**
     * 加载16:9的大图片,默认或出错使用{icon_def_16_9_l}，使用此方法前请判断非空
     *
     * @param context
     * @param url
     */
    public static DrawableRequestBuilder<?> getGlideWithLarge169Def(@NonNull Context context, @NonNull String url) {
        return getGlid(context, url).fitCenter().placeholder(R.mipmap.icon_def_16_9_l).error(R.mipmap.icon_def_16_9_l);
    }

    /**
     * 加载16:9的中图片,默认或出错使用{icon_def_16_9_m}，使用此方法前请判断非空
     *
     * @param context
     * @param url
     */
    public static DrawableRequestBuilder<?> getGlideWithMid169Def(@NonNull Context context, @NonNull String url) {
        return getGlid(context, url).fitCenter().placeholder(R.mipmap.icon_def_16_9_m).error(R.mipmap.icon_def_16_9_m);
    }
    /**
     * 加载16:9的中图片,默认或出错使用{icon_def_16_9_m}，使用此方法前请判断非空
     *
     * @param context
     * @param url
     */
    public static DrawableRequestBuilder<?> getGlideWithMid169DefByCenterCrop(@NonNull Context context, @NonNull String url) {
        return getGlid(context, url).centerCrop().placeholder(R.mipmap.icon_def_16_9_m).error(R.mipmap.icon_def_16_9_m);
    }

    /**
     * 加载16:9的中图片,默认或出错使用{icon_def_16_9_m}，使用此方法前请判断非空
     *
     * @param context
     * @param url
     */
    public static DrawableRequestBuilder<?> getGlideWithMid169DefNoFit(@NonNull Context context, @NonNull String url) {
        return getGlid(context, url).placeholder(R.mipmap.icon_def_16_9_m).error(R.mipmap.icon_def_16_9_m);
    }

    /**
     * 加载16:9的小图片,默认或出错使用{icon_def_16_9_s}，使用此方法前请判断非空
     *
     * @param context
     * @param url
     */
    public static DrawableRequestBuilder<?> getGlideWithSmall169Def(@NonNull Context context, @NonNull String url) {
        return getGlid(context, url).fitCenter().placeholder(R.mipmap.icon_def_16_9_s).error(R.mipmap.icon_def_16_9_s);
    }

    /**
     * 加载8:3的图片,默认或出错使用{icon_def_8_3}，使用此方法前请判断非空
     *
     * @param context
     * @param url
     */
    public static DrawableRequestBuilder<?> getGlideWith83Def(@NonNull Context context, @NonNull String url) {
        return getGlid(context, url).fitCenter().placeholder(R.mipmap.icon_def_8_3).error(R.mipmap.icon_def_8_3);
    }

    /**
     * 加载3:4的图片,默认或出错使用{icon_def_3_4}，使用此方法前请判断非空
     *
     * @param context
     * @param url
     */
    public static DrawableRequestBuilder<?> getGlideWith34Def(@NonNull Context context, @NonNull String url) {
        return getGlid(context, url).fitCenter().placeholder(R.mipmap.icon_def_3_4).error(R.mipmap.icon_def_3_4);
    }

    /**
     * 加载3:4的图片,默认或出错使用{icon_def_3_4}，使用此方法前请判断非空
     *
     * @param context
     * @param url
     */
    public static DrawableRequestBuilder<?> getGlideWith34DefNormal(@NonNull Context context, @NonNull String url) {
        return getGlid(context, url).placeholder(R.mipmap.icon_def_3_4).error(R.mipmap.icon_def_3_4);
    }

    /**
     * 加载1:1的图片,默认或出错使用{icon_def_1_1}，使用此方法前请判断非空
     *
     * @param context
     * @param url
     */
    public static DrawableRequestBuilder<?> getGlideWith11DefNoFit(@NonNull Context context, @NonNull String url) {
        return getGlid(context, url).placeholder(R.mipmap.icon_def_1_1).error(R.mipmap.icon_def_1_1);
    }
    /**
     * 加载1:1的图片,默认或出错使用{icon_def_1_1}，使用此方法前请判断非空
     *
     * @param context
     * @param url
     */
    public static DrawableRequestBuilder<?> getGlideWith11DefNoFitCenterCrop(@NonNull Context context, @NonNull String url) {
        return getGlid(context, url).centerCrop().placeholder(R.mipmap.icon_def_1_1).error(R.mipmap.icon_def_1_1);
    }

    /**
     * 未成功加载预览图的时候，背景采用亮黑色，以分辨出加载动画
     *
     * @param context
     * @param url
     */
    public static DrawableRequestBuilder<?> getGlideWithBlackBg(@NonNull Context context, @NonNull String url) {
        return getGlid(context, url).fitCenter().placeholder(R.drawable.bg_black_dim).error(R.drawable.bg_black_dim);
    }


    /**
     * 加载1:1的图片,默认或出错使用{icon_def_1_1}，使用此方法前请判断非空
     *
     * @param context
     * @param url
     */
    public static DrawableRequestBuilder<?> getGlideWith11Def(@NonNull Context context, @NonNull String url) {
        return getGlid(context, url).centerCrop().placeholder(R.mipmap.icon_def_1_1).error(R.mipmap.icon_def_1_1);
    }

    /**
     * 加载1:1的图片,默认或出错使用{icon_def_1_1}，使用此方法前请判断非空
     *
     * @param context
     * @param url
     */
    public static DrawableRequestBuilder<?> getGlideWith11DefTopImg(@NonNull Context context, @NonNull String url) {
        return getGlid(context, url).fitCenter().placeholder(R.mipmap.ic_launcher).error(R.mipmap.ic_launcher);
    }

    /**
     * 加载头像图片,默认或出错使用{icon_circle_avatar}，使用此方法前请判断非空
     *
     * @param context
     * @param url
     */
    public static DrawableRequestBuilder<?> getGlideWithAvatorDef(@NonNull Context context, @NonNull String url) {
        return getGlid(context, url).fitCenter().placeholder(R.mipmap.icon_circle_avatar).error(R.mipmap.icon_circle_avatar);
    }

    /**
     * 加载8:3图片,默认或出错使用{icon_def_8_3}，使用此方法前请判断非空
     *
     * @param context
     * @param url
     * @param imageView
     */
    public static void loadImgWith83Def(@NonNull Context context, @NonNull String url, @NonNull ImageView imageView) {
        if (context instanceof Activity) {
            if (((Activity) context).isDestroyed()) {
                return;
            }
        }
        getGlideWith83Def(context, url).into(imageView);
    }

    /**
     * 加载3:4图片,默认或出错使用{icon_def_3_4}，使用此方法前请判断非空
     *
     * @param context
     * @param url
     * @param imageView
     */
    public static void loadImgWith34Def(@NonNull Context context, @NonNull String url, @NonNull ImageView imageView) {
        if (context instanceof Activity) {
            if (((Activity) context).isDestroyed()) {
                return;
            }
        }
        getGlideWith34Def(context, url).into(imageView);
    }

    /**
     * 加载3:4图片,默认或出错使用{icon_def_3_4}，使用此方法前请判断非空
     *
     * @param context
     * @param url
     * @param imageView
     */
    public static void loadImgWith34DefNormal(@NonNull Context context, @NonNull String url, @NonNull ImageView imageView) {
        if (context instanceof Activity) {
            if (((Activity) context).isDestroyed()) {
                return;
            }
        }
        getGlideWith34DefNormal(context, url).into(imageView);
    }

    /**
     * 加载1:1图片,默认或出错使用{icon_def_1_1}，使用此方法前请判断非空
     *
     * @param context
     * @param url
     * @param imageView
     */
    public static void loadImgWith11Def(@NonNull Context context, @NonNull String url, @NonNull ImageView imageView) {
        if (context instanceof Activity) {
            if (((Activity) context).isDestroyed()) {
                return;
            }
        }
        getGlideWith11Def(context, url).into(imageView);
    }

    /**
     * 加载1:1图片,默认或出错使用{ic_launcher}，使用此方法前请判断非空
     * 用于市州切换标题图标加载
     *
     * @param context
     * @param url
     * @param imageView
     */
    public static void loadImgWith11DefTopImg(@NonNull Context context, @NonNull String url, @NonNull ImageView imageView) {
        if (context instanceof Activity) {
            if (((Activity) context).isDestroyed()) {
                return;
            }
        }
        getGlideWith11DefTopImg(context, url).into(imageView);
    }

    /**
     * 加载16:9大图片,默认或出错使用{icon_def_16_9_l}，使用此方法前请判断非空
     *
     * @param context
     * @param url
     * @param imageView
     */
    public static void loadImgLarge169Def(@NonNull Context context, @NonNull String url, @NonNull ImageView imageView) {
        if (context instanceof Activity) {
            if (((Activity) context).isDestroyed()) {
                return;
            }
        }
        getGlideWithLarge169Def(context, url).into(imageView);
    }

    /**
     * 加载16:9大图片,默认或出错使用{icon_def_16_9_l}，使用此方法前请判断非空
     *
     * @param context
     * @param url
     * @param imageView
     */
    public static void loadImgLarge169DefNotFit(@NonNull Context context, @NonNull String url, @NonNull ImageView imageView) {
        if (context instanceof Activity) {
            if (((Activity) context).isDestroyed()) {
                return;
            }
        }
        getGlideWithLarge169DefNotFit(context, url).dontTransform().into(imageView);
    }

    /**
     * 加载16:9中图片,默认或出错使用{icon_def_16_9_m}，使用此方法前请判断非空
     *
     * @param context
     * @param url
     * @param imageView
     */
    public static void loadImgMid169Def(@NonNull Context context, @NonNull String url, @NonNull ImageView imageView) {
        if (context instanceof Activity) {
            if (((Activity) context).isDestroyed()) {
                return;
            }
        }
        getGlideWithMid169Def(context, url).into(imageView);
    }

    /**
     * 加载16:9小图片,默认或出错使用{icon_def_16_9_s}，使用此方法前请判断非空
     *
     * @param context
     * @param url
     * @param imageView
     */
    public static void loadImgSmall169Def(@NonNull Context context, @NonNull String url, @NonNull ImageView imageView) {
        if (context instanceof Activity) {
            if (((Activity) context).isDestroyed()) {
                return;
            }
        }
        getGlideWithSmall169Def(context, url).into(imageView);
    }

    /**
     * 加载头像图片,默认或出错使用{icon_circle_avatar}，使用此方法前请判断非空
     *
     * @param context
     * @param url
     * @param imageView
     */
    public static void loadAvatorDef(@NonNull Context context, @NonNull String url, @NonNull ImageView imageView) {
        if (context instanceof Activity) {
            if (((Activity) context).isDestroyed()) {
                return;
            }
        }
        getGlideWithAvatorDef(context, url).into(imageView);
    }
}
